name: Self-hosted runner with slow tests (scheduled)

on:
  workflow_dispatch:
  schedule:
    - cron: "0 2 * * *"

env:
  RUN_SLOW: "yes"
  IS_GITHUB_CI: "1"
  # To be able to run tests on CUDA 12.2
  NVIDIA_DISABLE_REQUIRE: "1"
  SLACK_API_TOKEN: ${{ secrets.SLACK_API_TOKEN }}


jobs:
  run_all_tests_single_gpu:
    strategy:
      fail-fast: false
    runs-on: [self-hosted, single-gpu, nvidia-gpu, t4, ci]
    env:
      CUDA_VISIBLE_DEVICES: "0"
      TEST_TYPE: "single_gpu"
    container:
      image: huggingface/peft-gpu:latest
      options: --gpus all --shm-size "16gb" -e NVIDIA_DISABLE_REQUIRE=true
    defaults:
      run:
        shell: bash
    steps:
      - uses: actions/checkout@v3
      - name: Pip install
        run: |
          source activate peft
          pip install -e . --no-deps
          pip install pytest-reportlog
      
      - name: Run common tests on single GPU
        run: |
          source activate peft
          make tests_common_gpu

      - name: Run examples on single GPU
        run: |
          source activate peft
          make tests_examples_single_gpu
      
      - name: Run core tests on single GPU
        run: |
          source activate peft
          make tests_core_single_gpu

      - name: Run regression tests on single GPU
        run: |
          source activate peft
          make tests_regression
          
      - name: Generate Report
        if: always()
        run: |
          pip install slack_sdk tabulate
          python scripts/log_reports.py >> $GITHUB_STEP_SUMMARY

  run_all_tests_multi_gpu:
    strategy:
      fail-fast: false
    runs-on: [self-hosted, multi-gpu, nvidia-gpu, t4, ci]
    env:
      CUDA_VISIBLE_DEVICES: "0,1"
      TEST_TYPE: "multi_gpu"
    container:
      image: huggingface/peft-gpu:latest
      options: --gpus all --shm-size "16gb" -e NVIDIA_DISABLE_REQUIRE=true
    defaults:
      run:
        shell: bash
    steps:
      - uses: actions/checkout@v3
      - name: Pip install
        run: |
          source activate peft
          pip install -e . --no-deps
          pip install pytest-reportlog

      - name: Run core GPU tests on multi-gpu
        run: |
          source activate peft
          
      - name: Run common tests on multi GPU
        run: |
          source activate peft
          make tests_common_gpu
        
      - name: Run examples on multi GPU
        run: |
          source activate peft
          make tests_examples_multi_gpu
      
      - name: Run core tests on multi GPU
        run: |
          source activate peft
          make tests_core_multi_gpu
          
      - name: Generate Report
        if: always()
        run: |
          pip install slack_sdk tabulate
          python scripts/log_reports.py >> $GITHUB_STEP_SUMMARY
